package com.fanrenqiji.common.utils.excels.export;

import java.io.BufferedInputStream;
import java.io.InputStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fanrenqiji.common.exceptions.ExportException;

/**
 * @author lijian E-mail:ljz0721cx@163.com
 * @version 创建时间：2015年5月20日 下午2:22:37
 * @description 当做命令接收者导出数据都进行代理去校验是否有排队
 */
public class DataExportManager {
	/**
	 * 日志对象
	 */
	protected static Logger logger = LoggerFactory
			.getLogger(DataExportManager.class);
	// 最大导出数
	public static int maxExport=10000;
	// 最大访问数
	public static int maxVisit=1;

	//初始化访问数量
	private static int visit = 1;
	// 持有状体处理对象
	private ExportState exportState = null;
	// 需要构建的模板
	private String templet;
	// 构建的模板
	private InputStream is = null;

	public DataExportManager() {
	}

	/**
	 * 分配导出连接
	 * 
	 * @return
	 */
	public synchronized Boolean getCon() {
		if (visit > 0) {
			visit--;
			return true;
		}
		return false;
	}

	/**
	 * 释放资源
	 */
	public void releaseCon() throws ExportException{
		if (visit > maxVisit) {
			logger.error("释放导出链接时候遇到请求大于最大连接");
		}
		if (visit < maxVisit) {
			visit++;
		}
	}

	/**
	 * 构建导出数据的模板
	 * 
	 * @param is
	 * @param xls
	 */
	public void xlsExportTemplates(String xls) throws ExportException{
		if (visit == 0) {
			throw new ExportException("前面有兄弟正在导出数据。。先喝一杯咖啡在试试。。");
		}
		try {
			this.is = new BufferedInputStream(this.getClass()
					.getResourceAsStream("/templates/" + xls + ".xls"));
			this.templet = xls;
		} catch (Exception e) {
			throw new ExportException("构建导出的模板失败");
		}
	}

	/**
	 * 获得的流文件
	 * @return
	 */
	public InputStream getIs() {
		return is;
	}


	
	
	
	/**
	 * 
	 * @author lijian
	 *
	 */
	/*
	 * static class MyThread extends Thread { public void run() { for (int i =
	 * 0; i < 100; i++) { new DataExportManager().getCon(); System.out
	 * .println(new DataExportManager().visit == 0 ? "导出没有连接了" : "还剩下" + new
	 * DataExportManager().visit + "个连接");
	 * 
	 * } for (int i = 0; i < 20; i++) { new DataExportManager().releaseCon();
	 * System.out.println(new DataExportManager().visit); } } }
	 * 
	 * public static void main(String[] args) { new MyThread().start(); }
	 */
}
